package model;

import exceptions.AttribuutBestaatNietException;
import exceptions.AttribuutNaamKomtNietVoorInPrimaireSleutelException;


public class PrimaireSleutel extends AlternatieveSleutel {
	
	public PrimaireSleutel(String groepNaam, String databankNaam, Tabel tabel) {
		super(groepNaam, databankNaam, tabel);
	}

	/**
	 * Checks if this primairyKey contains all names and values from parameters
	 * @param namen
	 * @param waardes
	 * @return true is correct
	 */
	public boolean checkAttribuutNaam(String[] namen) {
		boolean check = true;
		for(Attribuut attribuut: attributen) {
			boolean naamCheck = false;
			for(int i=0; i<namen.length; i++) {
				if(attribuut.getNaam().equals(namen[i])) {
					naamCheck = true;
				}
			}
			if(!naamCheck) {
				check = false;
			}
		}
		return check;
	}

	public boolean check(Record record, String[] namen, String[] waardes) throws AttribuutNaamKomtNietVoorInPrimaireSleutelException, AttribuutBestaatNietException {
		boolean check = true;
		for(Attribuut attribuut: attributen) {
			int index = -1;
			for(int i=0; i<namen.length; i++) {
				if(attribuut.getNaam().equals(namen[i])) {
					index = i;
				}
			}
			
			if(index == -1) {
				throw new AttribuutNaamKomtNietVoorInPrimaireSleutelException("Attribuut naam " + attribuut.getNaam() + " komt niet voor in primairesleutel");
			} else {
				if(!record.getRecord(attribuut.getNaam()).equals(waardes[index])) {
					check = false;
				}
			}
		}
		return check;
	}
}
